package com.ysb.corrector.hmm;

import java.util.List;

/**
 * @author husc
 * @date 2021/3/16
 * 在HMM中，本来要输入的汉字为隐含状态链，拼音为观察值，即可见状态链
 */
public interface AbstractHmmParams {

    /**
     * 初始概率
     * 获取汉字字符串的首个汉字的概率，如：Prob(感->gan)
     * @param state 状态，即：汉字
     * @return 概率
     */
    float initialProbability(String state);

    /**
     * 输出概率
     * 获取汉字->拼音的概率，如：Prob(冒->mao)
     * @param state 状态，即：汉字
     * @param observation 观测值，即：拼音
     * @return 概率
     */
    float emission(String state, String observation);

    /**
     * 转换概率
     * 获取相邻汉字转换概率，如：感 -> 冒
     * @param fromState 前一个汉字
     * @param toState 相邻的后一个汉字
     * @return 转换概率
     */
    float transition(String fromState, String toState);

    /**
     * 观测值对应的所有可能状态
     * 获取某个观测值的所有状态
     * @param observation 观测值
     * @return 所有可能状态
     */
    List<String> getStates(String observation);
}
